from case.lnitial.first_use import FirstUseTest
from case.lnitial.lnitial_page import LnitialTest
from case.lnitial.systemsetting_bags_mode import SystemBagsTest
from case.lnitial.user_use import UseTest
from common.unit import AndroidUI
from case.login.login import Login
from case.recover.recover_bags_mode import RecoverTest
from case.storage.storage_page_bagmode import StorageTest
from case.storage.packing_boxes import PackingBoxedTest
from case.storage.unboxed_list import UnboxedTest
from case.checkout.checkout import CheckoutTest
import time


# 科室装袋，打开固定箱码，7寸玻璃屏，出码分离，展厅医院
class Run:
    def __init__(self):
        self.driver = AndroidUI.get_webdriver()
        self.sys = SystemBagsTest()
        self.firstuse = FirstUseTest()
        self.useruse = UseTest()
        self.ln = LnitialTest()
        self.lo = Login()
        self.re = RecoverTest()
        self.pack = PackingBoxedTest()

    def begin_time(self):
        now_time = time.strftime('%Y-%m-%d %H:%M:%S')
        print(f"测试开始时间{now_time}")

    # 初始页面三模块点击操作
    # def test_lnitial(self):
    #
    # AndroidUI().write_result("三模块点击测试", "测试中-------------------------------------------------")
    # print("----------------------------------------------------------初始页点击测试开始-----------------------------------------------------------------------------------")
    # self.ln.start_unfixed_box_test()
    # print('----------------------------------------------------------初始页面点击测试结束-----------------------------------------------------------------------------------')
    # AndroidUI().write_result("三模块点击测试", "测试结束-------------------------------------------------")
    #
    # AndroidUI().write_result("系统设置测试", "测试中-------------------------------------------------")

    # 选择展厅医院
    def test_choice_hospital(self):
        AndroidUI().write_result("选择展厅医院", "测试开始-------------------------------------------------")
        print(
            '--------------------------------------------------------------选择展厅医院中----------------------------------------------------------------------------------------')
        self.firstuse.start_test('展厅', '展厅医院')
        print(
            '--------------------------------------------------------------医院选择结束-------------------------------------------------------------------------------------')
        AndroidUI().write_result("选择展厅医院", "测试结束-------------------------------------------------")

    # 选择浙江服务器，出码分离，科室装袋，固定箱码打开
    def test_system_fixed(self):
        AndroidUI().write_result("系统设置测试", "测试开始-------------------------------------------------")
        print(
            '---------------------------------------------开始选择浙江服务器，出码分离，科室装袋，固定箱码打开-----------------------------------------------------')
        self.sys.start_fixed_box_test()
        print(
            '--------------------------------------------结束选择浙江服务器，出码分离，科室装袋，固定箱码打开-----------------------------------------------------')
        AndroidUI().write_result("系统设置测试", "测试结束-------------------------------------------------")

    # 首次使用操作
    def test_first_use(self):
        AndroidUI().write_result("首次使用", "测试中-------------------------------------------------")
        print(
            '-------------------------------------------------------------首次使用测试开始------------------------------------------------------------------------------------')
        self.useruse.start_test()
        print(
            '-------------------------------------------------------------首次使用测试结束-----------------------------------------------')
        AndroidUI().write_result("首次使用", "测试结束-------------------------------------------------")

    # 使用不同二维码登录
    def test_scan_login(self):
        AndroidUI().write_result("不同二维码登录", "测试中-------------------------------------------------")
        print(
            '-------------------------------------------------------------不同二维码登录测试开始------------------------------------------------------------------------------------')
        self.lo.start_test()
        print(
            '-------------------------------------------------------------不同二维码登录测试结束-----------------------------------------------')
        AndroidUI().write_result("不同二维码登录", "测试结束-------------------------------------------------")

    # 回收界面主流程
    def test_recove(self,conn):
        AndroidUI().write_result("回收界面的重启蓝牙，置零，输入重量，科室和护士认证，选择不同类型的垃圾进行打印，对可回收和自定义垃圾打印", "测试中-------------------------------------------------")
        print(
            '-------------------------------------------------------------回收界面测试开始------------------------------------------------------------------------------------')
        # 0.5为当未连接蓝牙秤的视乎输入的重量，如果输入“不置零”，贼不仅置零操作;演示医院为手动输入的科室，
        self.re.start_test(conn)
        print(
            '-------------------------------------------------------------回收界面测试结束-----------------------------------------------')
        AndroidUI().write_result("回收界面的重启蓝牙，置零，输入重量，科室和护士认证，选择不同类型的垃圾进行打印，对可回收和自定义垃圾打印", "测试结束-------------------------------------------------")

    # 入库界面主流程
    def test_storage(self):
        AndroidUI().write_result("回收界面的扫码操作", "测试中-------------------------------------------------")
        print(
            '-------------------------------------------------------------回收界面的扫码操作测试开始------------------------------------------------------------------------------------')
        StorageTest().start_test()
        print(
            '-------------------------------------------------------------回收界面的扫码操作测试结束-----------------------------------------------')
        AndroidUI().write_result("回收界面的扫码操作", "测试结束-------------------------------------------------")

    # 装箱界面主流程,括号是从0开始，左闭右开
    def test_packing(self, begin, end):
        AndroidUI().write_result("---------------------------------------装箱界面装箱操作", "测试中-------------------------------------------------")
        print(
            '-------------------------------------------------------------装箱界面测试开始------------------------------------------------------------------------------------')
        self.pack.start_test(begin, end, 1)
        print(
            '-------------------------------------------------------------装箱界面测试结束-----------------------------------------------')
        AndroidUI().write_result("---------------------------------------装箱界面装箱操作", "测试结束-------------------------------------------------")

    # 未装箱列表操作
    def test_unboxed(self):
        AndroidUI().write_result("---------------------------------------未装箱界面装箱操作", "测试中-------------------------------------------------")
        print(
            '-------------------------------------------------------------未装箱界面测试开始------------------------------------------------------------------------------------')
        UnboxedTest().start_test()
        print(
            '-------------------------------------------------------------未装箱界面测试结束-----------------------------------------------')
        AndroidUI().write_result("---------------------------------------未装箱界面装箱操作", "测试结束-------------------------------------------------")

    # 出库界面操作
    def test_checkout(self):
        AndroidUI().write_result("---------------------------------------出库界面装箱操作", "测试中-------------------------------------------------")
        print(
            '-------------------------------------------------------------出库界面测试开始------------------------------------------------------------------------------------')
        CheckoutTest().start_test()
        try:
            self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("序号")')
            print('固定箱码不可回收无法出库，测试成功')
            AndroidUI().write_result("固定箱码不可回收无法出库", "成功")
        except:
            print('固定箱码不可回收无法出库，测试失败')
            AndroidUI.capture()
            AndroidUI().write_result("固定箱码不可回收无法出库", "失败")
        print(
            '-------------------------------------------------------------出库界面测试结束-----------------------------------------------')
        AndroidUI().write_result("---------------------------------------出库界面装箱操作", "测试结束-------------------------------------------------")

    def test_end_time(self):
        now_time = time.strftime('%Y-%m-%d %H:%M:%S')
        print(f"测试结束时间{now_time}")

    def back_button(self):
        self.driver.keyevent(4)

    def run_test(self):
        AndroidUI().write_result("----------------------------------科室装袋打开固定箱码测试开始-----------------------------------", "-----开始-------")
        self.begin_time()
        print('===========================================================科室装袋，开启固定箱码测试开始=============================================================')
        self.test_first_use()  # 用户使用模块
        self.test_choice_hospital()  # 选择展厅医院
        self.test_system_fixed()  # 系统设置模块，选择科室装袋，固定箱码
        self.test_scan_login()  # 不同二维码登录
        self.test_recove('nook')  # 回收操作,ok为连接蓝牙秤。其他为未连接，要加引号



        # self.test_storage()  # 入库操作做
        # self.test_packing(1, 15)     #范围大于未装箱垃圾袋数，会出问题
        # # self.test_packing(1, 3)  # 范围大于未装箱垃圾袋数，会出问题
        # # self.test_unboxed()未完成       #未装箱列表还没有单独做,先注释掉
        # self.test_checkout()  # 固定箱码不可回收无法出库
        # self.back_button()
        # self.back_button()
        # self.back_button()
        # self.back_button()  # 返回首页
        # self.test_end_time()
        print('===========================================================科室装袋，开启固定箱码测试开始=============================================================')
        AndroidUI().write_result("----------------------------------科室装袋打开固定箱码测试开始-----------------------------------", "-----结束-------")
        self.begin_time()

if __name__ == '__main__':
    r = Run()
    r.run_test()
    # for i in range(10):
    #     print(i)
    #     r.run_test()
